import { CheckUtil } from './check';

/** 字符串相关包 **/
export const StringUtil = {
  /**
   * 字符串中获取文件名称
   * @example '/systemFile/a/b/c.jpeg' => 'c.jpeg'
   * @param str
   * @returns {[]}
   */
  getFileName(str) {
    return str.replace(/(.*)?\/(.*)/, '$2');
  },

  /**
   * 将字符串按个数拆分
   * @example ("hello", 2) => ["he", "ll", "o"]
   * @param str
   * @returns {[]}
   */
  chunk(str, num) {
    const len = Math.ceil(str.length / num);
    const arr = [];
    for (let i = 0; i < len; i++) {
      const reverseStr = str.split('').reverse().join('');
      const s = reverseStr
        .slice(i * num, i * num + num)
        .split('')
        .reverse()
        .join('');
      arr.unshift(s);
    }
    return arr;
  },

  /**
   * 将字符串首字符大写
   * @example "hello world" => "Hello world"
   * @param str
   * @returns {string}
   */
  toUpperCaseFirst(str) {
    if (!CheckUtil.isString(str)) {
      return '';
    }

    return str.charAt(0).toUpperCase() + str.slice(1);
  },

  /**
   * 字符串首字符小写
   * @example "Hello world" => "hello world"
   * @param str
   * @returns {string}
   */
  toLowerCaseFirst(str) {
    if (!CheckUtil.isString(str)) {
      return '';
    }

    return str.charAt(0).toLowerCase() + str.slice(1);
  },

  /**
   * 将"-"+字符转换成大写字符
   * @example "hello-world" => "HelloWorld"
   * @param str
   * @param firstFlag 是否大写首字符
   * @returns {string}
   */
  toCamelize(str, firstFlag = true) {
    if (!CheckUtil.isString(str)) {
      return '';
    }

    const res = str.replace(/-(\w)/g, function (_, c) {
      return c ? c.toUpperCase() : '';
    });

    return firstFlag ? this.toUpperCaseFirst(res) : res;
  },

  /**
   * 将字符串非边界大写字母字符转化成"-"加小写格式
   * @example "HelloWorld" => "hello-world"
   * @param str
   * @param firstFlag 是否小写首字符
   * @returns {string}
   */
  toHyphenate(str, firstFlag = true) {
    if (!CheckUtil.isString(str)) {
      return '';
    }
    const res = str.replace(/\B([A-Z])/g, '-$1').toLowerCase();
    return firstFlag ? this.toLowerCaseFirst(res) : res;
  },
};
